<script>
	import base64 from './common/js/lib/base64.js';
	import i18n from './locale/index.js';
	export default {
		globalData: {
			data: {
				// 场景值
				cache_scene_key: "cache_scene_key",
				// uuid缓存key
				cache_user_uuid_key: "cache_user_uuid_key",
				// 配置信息缓存key
				cache_config_info_key: "cache_config_info_key",
				// 用户登录缓存key
				cache_user_login_key: "cache_user_login_key",
				// 用户信息缓存key
				cache_user_info_key: "cache_shop_user_info_key",
				// 设备信息缓存key
				cache_system_info_key: "cache_shop_system_info_key",
				// 用户地址选择缓存key
				cache_buy_user_address_select_key: "cache_buy_user_address_select_key",
				// 启动参数缓存key
				cache_launch_info_key: "cache_shop_launch_info_key",
				// 获取位置选择缓存key
				cache_userlocation_key: "cache_userlocation_key",
				// 页面支付临时缓存key
				cache_page_pay_key: "cache_page_pay_key",
				// 上一页地址缓存key
				cache_prev_page_key: 'cache_prev_page_key',
				// 默认用户头像
				default_user_head_src: "/static/images/common/user.png",
				// 成功圆形提示图片
				default_round_success_icon: "/static/images/common/round-success-icon.png",
				// 错误圆形提示图片
				default_round_error_icon: "/static/images/common/round-error-icon.png",
				// 分享及转发使用页面设置的默认图片及系统默认图片（0 否, 1 是）
				is_share_use_image: 1,
				// 商品详情页底部导航是否开启购物车功能（0 否, 1 是）
				is_goods_bottom_opt_cart: 1,
				// 商品详情页底部导航存在指定返回参数[is_opt_back=1]展示返回按钮（0 否, 1 是）
				is_goods_bottom_opt_back: 1,
				// 门店详情顶部导航返回按钮（0 否, 1 是）
				is_realstore_top_nav_back: 1,
				// 开启浮动客服、前提是后台需要开启客服功能（0 否, 1 是）
				is_online_service_fixed: 1,
				// 分类页面商品列表模式一级分类使用图标类型（0 大图片, 1 icon图标）
				category_goods_model_icon_type: 0,
				// 强制使用文字作为logo（默认后台站点设置手机端图片logo->当前指定logo->后台手机管理小程序配置名称->站点设置中的站点名称）
				is_logo_use_text: 0,
				// tabbar页面
				tabbar_pages: [
					"/pages/index/index",
					"/pages/goods-category/goods-category",
					"/pages/cart/cart",
					"/pages/user/user"
				],
				// 请求地址
				request_url: 'https://ru.feiyuebaoxiang.cn/',
				// 静态资源地址（如系统根目录不在public目录下面请在静态地址后面加public目录、如：
				static_url: 'https://ru.feiyuebaoxiang.cn/',
				// 系统类型（默认default、如额外独立小程序、可与程序分身插件实现不同主体小程序及支付独立）
				system_type: 'default',
				// 基础信息
				application_title: '飞越保祥',
				application_describe: '企业级B2C开源电商系统！',
				// 默认logo、如 /static/images/common/logo.png
				application_logo: '',
				// 版本号
				version: 'v2.3.2',
				// 货币价格符号
				currency_symbol: '￥',
				// 主题类型        主题颜色
				// 黄色 yellow    #f6c133
				// 红色 red       #ff0036
				// 黑色 black     #333333
				// 绿色 green     #20a53a
				// 橙色 orange    #fe6f04
				// 蓝色 blue      #1677ff
				// 棕色 brown     #8B4513
				// 紫色 purple    #623cec
				default_theme: 'red',
			},
			/**
			 * 启动参数处理
			 */
			launch_params_handle(params) {
				// 原有缓存
				var cache_params = this.get_launch_cache_info();

				// 当前参数、从query读取覆盖
				if ((params.query || null) != null) {
					params = params.query;
				}
				// query下scene参数解析处理
				if ((params.scene || null) != null) {
					params = this.url_params_to_json(decodeURIComponent(params.scene));
				}

				// 原始缓存是否存在邀请id、邀请使用最开始的用户id
				if (cache_params != null && (cache_params.referrer || null) != null) {
					params['referrer'] = cache_params.referrer;
				}

				return params;
			},

			/**
			 * 当前是否单页模式
			 */
			is_current_single_page() {
				var scene = this.get_scene_data();
				// #ifdef MP-WEIXIN
				return (scene == 1154) ? 1 : 0;
				// #endif
				return 0;
			},

			/**
			 * 场景值获取
			 */
			get_scene_data() {
				return uni.getStorageSync(this.data.cache_scene_key) || 0;
			},

			/**
			 * 场景值设置
			 */
			set_scene_data(params) {
				var scene = ((params.scene || null) == null) ? 0 : parseInt(params.scene);
				uni.setStorageSync(this.data.cache_scene_key, scene);
				return scene;
			},

			/**
			 * 获取设备信息
			 * key      指定key
			 * dv       默认数据（不存在则读取、默认null）
			 * is_real  是否实时读取
			 */
			get_system_info(key, dv, is_real) {
				var info = null;
				if ((is_real || false) == true) { //如果为true
					info = this.set_system_info() || null; //当前设备信息
				} else {
					info = uni.getStorageSync(this.data.cache_system_info_key) || null; //获取设备
				}
				if (info == null || (key || null) == null) {
					return info;
				}
				return (info[key] == undefined) ? (dv == undefined ? null : dv) : info[key];
			},

			/**
			 * 设置设备信息
			 */
			set_system_info() {
				var system_info = uni.getSystemInfoSync();
				uni.setStorageSync(this.data.cache_system_info_key, system_info);
				return system_info;
			},

			/**
			 * 请求地址生成
			 * a              方法
			 * c              控制器
			 * plugins        插件标记（传参则表示为插件请求）
			 * params         url请求参数
			 * group          组名称（默认 api）
			 */
			get_request_url(a, c, plugins, params, group, e) {
				let you = uni.getLocale()
				a = a || "index";
				c = c || "index";

				// 是否插件请求、走api统一插件调用控制器
				var plugins_params = "";
				if ((plugins || null) != null) {
					plugins_params = "&pluginsname=" + plugins + "&pluginscontrol=" + c + "&pluginsaction=" + a;
					c = "plugins";
					a = "index";
				}

				// 参数处理
				params = params || "";
				if (params != "" && params.substr(0, 1) != "&") {
					params = "&" + params;
				}

				// 参数处理
				var url = this.data.request_url + (group || "api") + ".php?s=" + c + "/" + a + plugins_params;
				return this.request_params_handle(url) + `&ajax=ajax&language=${you}` + params;
			},


			/**
			 * 请求参数处理
			 * url     url地址
			 */
			request_params_handle(url) {
				// 用户信息
				var user = this.get_user_cache_info();
				var token = user == false ? '' : user.token || '';//userfalse为‘’
				var uuid = this.request_uuid();
				var client_value = this.application_client_type();
				// 拼接标识
				var join = (url.indexOf('?') == -1) ? '?' : '&';
				return url + join + "system_type=" + this.data.system_type + "&application=app&application_client_type=" +
					client_value + "&token=" + token + "&uuid=" + uuid;
			},
			/**
			 * 获取用户信息,信息不存在则唤醒授权
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * return     有用户数据直接返回, 则回调调用者
			 */
			get_user_info(object, method) {

				var user = this.get_user_cache_info();
				if (user == false) {
					// #ifdef MP
					// 小程序唤醒用户授权
					this.user_login(object, method);
					// #endif

					// #ifdef H5 || APP
					// h5、app登陆注册
					uni.showModal({
						title: i18n[uni.getLocale()]['globalData.reminder'],
						content: i18n[uni.getLocale()]['globalData.login-register'],
						confirmText: i18n[uni.getLocale()]['globalData.affirm'],
						cancelText: i18n[uni.getLocale()]['globalData.Not-yet'],
						success: result => {
							if (result.confirm) {
								uni.navigateTo({
									url: "/pages/login/login"
								});
							}
						}
					});
					// #endif

					return false;
				}
				return user;
			},

			/**
			 * 从缓存获取用户信息、可指定key和默认值
			 * key              数据key
			 * default_value    默认值
			 */
			get_user_cache_info(key, default_value) {
				var user = uni.getStorageSync(this.data.cache_user_info_key) || null;
				if (user == null) {
					// 是否存在默认值
					return default_value == undefined ? false : default_value;
				}

				// 是否读取key
				if ((key || null) != null) {
					return user[key] == undefined ? default_value == undefined ? null : default_value : user[key];
				}

				return user;
			},

			/**
			 * 系统参数获取
			 */
			get_launch_cache_info() {
				return uni.getStorageSync(this.data.cache_launch_info_key) || null;
			},

			/**
			 * 系统参数设置
			 */
			set_launch_cache_info(params) {
				params = this.launch_params_handle(params);
				uni.setStorageSync(this.data.cache_launch_info_key, params);
				return params;
			},

			/**
			 * 获取登陆授权数据
			 */
			get_login_cache_info() {
				return uni.getStorageSync(this.data.cache_user_login_key) || null;
			},

			/**
			 * 用户登录
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * auth_data  授权数据
			 */
			user_auth_login(object, method, auth_data) {
				var self = this;
				// #ifdef MP-WEIXIN || MP-QQ || MP-BAIDU || MP-TOUTIAO || MP-KUAISHOU
				uni.checkSession({
					success: function() {
						var login_data = self.get_login_cache_info();
						if (login_data == null) {
							self.user_login(object, method);
						} else {
							self.get_user_login_info(object, method, login_data, auth_data);
						}
					},
					fail: function() {
						uni.removeStorageSync(self.data.cache_user_login_key);
						self.user_login(object, method);
					}
				});
				// #endif
				// #ifdef MP-ALIPAY
				var login_data = self.get_login_cache_info();
				if (login_data == null) {
					self.user_login(object, method);
				} else {
					self.get_user_login_info(object, method, login_data, auth_data);
				}
				// #endif
			},

			/**
			 * 用户登录
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * auth_data  授权数据
			 */
			user_login(object, method) {
				var login_data = uni.getStorageSync(this.data.cache_user_login_key) || null;
				if (login_data == null) {
					this.user_login_handle(object, method, true);
				} else {
					this.login_to_auth();
				}
			},

			/**
			 * 用户登录处理
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * auth_data  授权数据
			 * is_to_auth 是否进入授权
			 */
			user_login_handle(object, method, is_to_auth = true) {
				var self = this;
				uni.showLoading({
					title: i18n[uni.getLocale()]['globalData.empower']
				});
				var action = 'login';
				// #ifdef MP-BAIDU
				action = 'getLoginCode';
				// #endif
				uni[action]({
					success: res => {
						if (res.code) {
							uni.request({
								url: self.get_request_url('appminiuserauth', 'user'),
								method: 'POST',
								data: {
									authcode: res.code
								},
								dataType: 'json',
								success: res => {
									uni.hideLoading();
									if (res.data.code == 0) {
										var data = res.data.data;
										var client_type = this.application_client_type();
										if ((data.is_user_exist || 0) == 1 || client_type ==
											'weixin') {
											uni.setStorage({
												key: self.data.cache_user_info_key,
												data: data,
												success: res => {
													if (typeof object === 'object' && (
															method || null) != null) {
														object[method]();
													}
												},
												fail: () => {
													self.showToast(i18n[uni
														.getLocale()][
														'globalData.Server-Cache-failure'
													]);
												}
											});
										} else {
											uni.setStorage({
												key: self.data.cache_user_login_key,
												data: data
											});
											if (is_to_auth) {
												self.login_to_auth();
											}
										}
									} else {
										uni.hideLoading();
										self.showToast(res.data.msg);
									}
								},
								fail: () => {
									uni.hideLoading();
									self.showToast(i18n[uni.getLocale()][
										'globalData.Server-request-error'
									]);
								}
							});
						}
					},
					fail: e => {
						uni.hideLoading();
						self.showToast(i18n[uni.getLocale()]['globalData.empower-error']);
					}
				});
			},

			/**
			 * 跳转到登录页面授权
			 */
			login_to_auth() {
				uni.showModal({
					title: i18n[uni.getLocale()]['globalData.reminder'],
					content: i18n[uni.getLocale()]['globalData.authorize-user-information'],
					confirmText: i18n[uni.getLocale()]['globalData.affirm'],
					cancelText: i18n[uni.getLocale()]['globalData.Not-yet'],
					success: result => {
						if (result.confirm) {
							uni.navigateTo({
								url: "/pages/login/login"
							});
						}
					}
				});
			},

			/**
			 * 获取用户授权信息
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 * login_data 登录信息
			 * auth_data  授权数据
			 */
			get_user_login_info(object, method, login_data, auth_data) {
				// 邀请人参数
				var params = this.get_launch_cache_info();
				var referrer = params == null ? 0 : params.referrer || 0;

				// 请求数据
				var data = {
					"auth_data": JSON.stringify(auth_data),
					"openid": login_data.openid,
					"unionid": login_data.unionid,
					"referrer": referrer
				};

				// 用户信息处理
				uni.showLoading({
					title: i18n[uni.getLocale()]['globalData.empower']
				});
				var self = this;
				uni.request({
					url: self.get_request_url('appminiuserinfo', 'user'),
					method: 'POST',
					data: data,
					dataType: 'json',
					success: res => {
						uni.hideLoading();
						if (res.data.code == 0) {
							uni.setStorage({
								key: self.data.cache_user_info_key,
								data: res.data.data,
								success: res => {
									if (typeof object === 'object' && (method || null) != null) {
										object[method]();
									}
								},
								fail: () => {
									self.showToast(i18n[uni.getLocale()][
										'globalData.Server-Cache-failure'
									]);
								}
							});
						} else {
							self.showToast(res.data.msg);
						}
					},
					fail: () => {
						uni.hideLoading();
						self.showToast(i18n[uni.getLocale()]['globalData.Server-request-error']);
					}
				});
			},

			/**
			 * 字段数据校验
			 * data           待校验的数据, 一维json对象
			 * validation     待校验的字段, 格式 [{fields: 'mobile', msg: '请填写手机号码', is_can_zero: 1(是否可以为0)}, ...]
			 */
			fields_check(data, validation) {
				for (var i in validation) {
					var temp_value = data[validation[i]["fields"]];
					var temp_is_can_zero = validation[i]["is_can_zero"] || null;
					if (temp_value == undefined || temp_value.length == 0 || temp_value == -1 || temp_is_can_zero ==
						null && temp_value == 0) {
						this.showToast(validation[i]['msg']);
						return false;
					}
				}
				return true;
			},

			/**
			 * 获取当前时间戳
			 */
			get_timestamp() {
				return parseInt(new Date().getTime() / 1000);
			},

			/**
			 * 获取日期
			 * format       日期格式（默认 yyyy-MM-dd h:m:s）
			 * timestamp    时间戳（默认当前时间戳）
			 */
			get_date(format, timestamp) {
				var d = new Date((timestamp || this.get_timestamp()) * 1000);
				var date = {
					"M+": d.getMonth() + 1,
					"d+": d.getDate(),
					"h+": d.getHours(),
					"m+": d.getMinutes(),
					"s+": d.getSeconds(),
					"q+": Math.floor((d.getMonth() + 3) / 3),
					"S+": d.getMilliseconds()
				};
				if (/(y+)/i.test(format)) {
					format = format.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
				}
				for (var k in date) {
					if (new RegExp("(" + k + ")").test(format)) {
						format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" +
							date[k]).length));
					}
				}

				return format;
			},

			/**
			 * 获取对象、数组的长度、元素个数
			 * obj      要计算长度的元素（object、array、string）
			 */
			get_length(obj) {
				var obj_type = typeof obj;
				if (obj_type == "string") {
					return obj.length;
				} else if (obj_type == "object") {
					var obj_len = 0;
					for (var i in obj) {
						obj_len++;
					}
					return obj_len;
				}
				return false;
			},

			/**
			 * 价格保留两位小数
			 * price      价格保留两位小数
			 */
			price_two_decimal(x) {
				var f_x = parseFloat(x);
				if (isNaN(f_x)) {
					return 0;
				}
				var f_x = Math.round(x * 100) / 100;
				var s_x = f_x.toString();
				var pos_decimal = s_x.indexOf('.');
				if (pos_decimal < 0) {
					pos_decimal = s_x.length;
					s_x += '.';
				}
				while (s_x.length <= pos_decimal + 2) {
					s_x += '0';
				}
				return s_x;
			},

			// url主要部分不要？部分
			get_url_main_part(url) {
				if (url.indexOf("?") == -1) {
					var value = url;
				} else {
					var temp_str = url.split("?");
					var value = temp_str[0];
				}
				return value;
			},

			/**
			 * 当前地址是否存在tabbar中
			 */
			is_tabbar_pages(url) {
				var value = this.get_url_main_part(url);
				if ((value || null) == null) {
					return false;
				}
				var temp_tabbar_pages = this.data.tabbar_pages; //tabar路径
				for (var i in temp_tabbar_pages) {
					if (temp_tabbar_pages[i] == value) {
						return true;
					}
				}
				return false;
			},

			/**
			 * 事件操作
			 */
			operation_event(e) {
				var value = e.currentTarget.dataset.value || null; //跳转路径
				var type = parseInt(e.currentTarget.dataset.type);
				if (value != null) { //跳转路径不为空
					switch (type) {
						// web
						case 0:
							this.open_web_view(value);
							break;
							// 内部页面
						case 1:
							if (this.is_tabbar_pages(value)) {
								uni.switchTab({
									url: value
								});
							} else {
								uni.navigateTo({
									url: value
								});
							}
							break;
							// 跳转到外部小程序
						case 2:
							uni.navigateToMiniProgram({
								appId: value
							});
							break;
							// 跳转到地图查看位置
						case 3:
							var values = value.split('|');
							if (values.length != 4) {
								this.showToast(i18n[uni.getLocale()]['globalData.form']);
								return false;
							}
							this.open_location(values[2], values[3], values[0], values[1]);
							break;
							// 拨打电话
						case 4:
							this.call_tel(value);
							break;
					}
				}
			},

			/**
			 * 打开 webview页面
			 * value    [string]  url地址
			 */
			open_web_view(value) {
				uni.navigateTo({
					url: "/pages/web-view/web-view?url=" + encodeURIComponent(value)
				});
			},

			/**
			 * 默认弱提示方法
			 * msg    [string]  提示信息
			 * status [string]  状态 默认error [正确success, 错误error]
			 */
			showToast(msg, status) {
				if ((status || 'error') == 'success') {
					uni.showToast({
						icon: 'success',
						title: msg,
						duration: 3000
					});
				} else {
					uni.showToast({
						icon: 'none',
						title: msg,
						duration: 3000
					});
				}
			},

			/**
			 * alert确认框
			 * title              [string]    标题（默认空）
			 * msg                [string]    提示信息，必传
			 * is_show_cancel     [int]       是否显示取消按钮（默认显示 0否, 1|undefined是）
			 * cancel_text        [string]    取消按钮文字（默认 取消）
			 * cancel_color       [string]    取消按钮的文字颜色，必须是 16 进制格式的颜色字符串（默认 #000000）
			 * confirm_text       [string]    确认按钮文字（默认 确认）
			 * confirm_color      [string]    确认按钮的文字颜色，必须是 16 进制格式的颜色字符串（默认 #000000）
			 * object             [boject]    回调操作对象，点击确认回调参数1，取消回调0
			 * method             [string]    回调操作对象的函数
			 * this.$t('')    国际化
			 */
			alert(e) {
				var msg = e.msg || null;
				if (msg != null) {
					var title = e.title || '';
					var is_show_cancel = e.is_show_cancel == 0 ? false : true;
					var cancel_text = e.cancel_text || i18n[uni.getLocale()]['globalData.cancel'];
					var confirm_text = e.confirm_text || i18n[uni.getLocale()]['globalData.affirm'];
					var cancel_color = e.cancel_color || '#000000';
					var confirm_color = e.confirm_color || '#576B95';
					uni.showModal({
						title: title,
						content: msg,
						showCancel: is_show_cancel,
						cancelText: cancel_text,
						cancelColor: cancel_color,
						confirmText: confirm_text,
						confirmColor: confirm_color,
						success(res) {
							if ((e.object || null) != null && typeof e.object === 'object' && (e.method || null) !=
								null) {
								e.object[e.method](res.confirm ? 1 : 0);
							}
						}
					});
				} else {
					self.showToast(i18n[uni.getLocale()]['globalData.reminder-empty']);
				}
			},

			/**
			 * 是否需要登录
			 * 是否需要绑定手机号码
			 */
			user_is_need_login(user) {
				// 用户信息是否正确
				if (user == false) {
					return true;
				}
				// 是否需要绑定手机号码
				if ((user.is_mandatory_bind_mobile || 0) == 1) {
					if ((user.mobile || null) == null) {
						return true;
					}
				}
				return false;
			},

			// url参数转json对象
			url_params_to_json(url_params) {
				var json = new Object();
				if ((url_params || null) != null) {
					var arr = url_params.split('&');
					for (var i = 0; i < arr.length; i++) {
						var temp = arr[i].split('=');
						json[temp[0]] = temp[1];
					}
				}
				return json;
			},

			// json对象转url请求参数
			json_to_url_params(data) {
				var str = '';
				for (var i in data) {
					if (str != '') {
						str += '&';
					}
					str += i + '=' + data[i];
				}
				return str;
			},

			// 拨打电话
			call_tel(value) {
				if ((value || null) != null) {
					uni.makePhoneCall({
						phoneNumber: value.toString()
					});
				}
			},

			/**
			 * 登录校验
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 */
			is_login_check(res, object, method) {
				if (res.code == -400) {
					uni.clearStorage();
					this.get_user_info(object, method);
					return false;
				}
				return true;
			},

			/**
			 * 设置导航reddot
			 * index     tabBar 的哪一项，从左边算起（0开始）
			 * type      0 移出, 1 添加 （默认 0 移出）
			 */
			set_tab_bar_reddot(index, type) {
				if (index !== undefined && index !== null) {
					if ((type || 0) == 0) {
						uni.hideTabBarRedDot({
							index: Number(index)
						});
					} else {
						uni.showTabBarRedDot({
							index: Number(index)
						});
					}
				}
			},

			/**
			 * 设置导航车badge
			 * index     tabBar 的哪一项，从左边算起（0开始）
			 * type      0 移出, 1 添加 （默认 0 移出）
			 * value     显示的文本，超过 4 个字符则显示成 ...（type参数为1的情况下有效）
			 */
			set_tab_bar_badge(index, type, value) {
				if (index !== undefined && index !== null) {
					if ((type || 0) == 0) {
						uni.removeTabBarBadge({
							index: Number(index)
						});
					} else {
						uni.setTabBarBadge({
							index: Number(index),
							"text": value.toString()
						});
					}
				}
			},

			// 页面分享处理
			page_share_handle(share = null) {
				// 当前页面
				var pages = getCurrentPages();
				var obj = pages[pages.length - 1];

				// 分享信息、是否指定参数
				if ((share || null) == null) {
					share = {}
				}
				// 从页面对象获取参数
				if (Object.keys(share).length <= 0) {
					share = obj.share_info || {};
				}
				// 参数处理
				share = this.share_content_handle(share);

				// #ifdef MP-WEIXIN
				// 微信小程序展示系统分享好友和朋友圈按钮
				// 其他端小程序不用展示会调起分享窗口
				var not_pages = ['/pages/user/user', '/pages/cart/cart'];
				if (not_pages.indexOf(share.url) == -1) {
					uni.showShareMenu({
						withShareTicket: true,
						title: share.title,
						desc: share.desc,
						path: share.path + share.query,
						imageUrl: share.img,
						menus: ['shareAppMessage', 'shareTimeline']
					});
				} else {
					wx.hideShareMenu({
						menus: ['shareTimeline']
					});
				}
				// #endif
				// #ifdef H5
				// H5处理微信环境分享自定义信息
				if (this.is_weixin_env()) {
					var page_url = this.get_page_url();
					uni.request({
						url: this.get_request_url("signpackage", "index", "share"),
						method: "POST",
						data: {
							url: encodeURIComponent(page_url)
						},
						dataType: "json",
						success: res => {
							if (res.data.code == 0 && (res.data.data.package || null) != null) {
								var data = res.data.data.package;
								var wx = require('jweixin-module');
								wx.config({
									debug: false,
									appId: data.appId,
									timestamp: data.timestamp,
									nonceStr: data.nonceStr,
									signature: data.signature,
									jsApiList: [
										'updateAppMessageShareData',
										'updateTimelineShareData',
										'onMenuShareWeibo'
									]
								});
								wx.ready(function() {
									// 自定义“分享给朋友”及“分享到QQ”按钮的分享内容
									wx.updateAppMessageShareData({
										title: share.title,
										desc: share.desc,
										link: share.url,
										imgUrl: share.img
									});
									// 自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容
									wx.updateTimelineShareData({
										title: share.title,
										link: share.url,
										imgUrl: share.img
									});
									// 获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
									wx.onMenuShareWeibo({
										title: share.title,
										desc: share.desc,
										link: share.url,
										imgUrl: share.img
									});
								});
							}
						},
						fail: () => {
							this.showToast(i18n[uni.getLocale()]['globalData.Server-request-error']);
						}
					});
				}
				// #endif

				// #ifdef MP-BAIDU
				// 百度小程序wab化搜索引擎数据设置
				uni.setPageInfo({
					title: share.title,
					keywords: share.kds || share.desc,
					articleTitle: share.title,
					description: share.desc,
					image: share.img,
					video: ((share.video || null) == null) ? [] : [{
						url: share.video,
						duration: '100',
						image: share.img
					}]
				});
				// #endif
			},

			/**
			 * 获取配置信息、可指定key和默认值
			 * key              数据key（支持多级读取、以 . 分割key名称）
			 * default_value    默认值
			 */
			get_config(key, default_value) {
				var value = null;
				var config = uni.getStorageSync(this.data.cache_config_info_key) || null; //拿到本地存储的信息
				if (config != null) { //不为空情况通过.分割数组
					// 数据读取
					var arr = key.split('.'); //['config', 'common_app_is_online_service']
					if (arr.length == 1) { //长度为1代表只有一个数组
						value = config[key] == undefined ? null : config[key]; //获得config里面key相同的属性来拿到属性值
					} else { //长度不为1直接赋值本地存储
						value = config;
						for (var i in arr) { //循环页面传过来的值
							if (value[arr[i]] != undefined) {
								value = value[arr[i]];
							} else {
								value = null;
								break;
							}
						}
					}
				}
				// 默认值
				if (value == null && default_value != undefined) {
					value = default_value;
				}
				// 无数据则处理自定义字段定义的数据
				if (value == null) {
					switch (key) {
						// 货币符号
						case 'currency_symbol':
							value = this.data.currency_symbol;
							break;
					}
				}
				return value
			},

			// 初始化 配置信息
			init_config() {
				uni.request({
					url: this.get_request_url('common', 'base'),
					method: 'POST',
					data: {
						is_key: 1
					},
					dataType: 'json',
					success: res => {
						if (res.data.code == 0) {
							uni.setStorage({
								key: this.data.cache_config_info_key,
								data: res.data.data,
								fail: () => {
									this.showToast(i18n[uni.getLocale()][
										'globalData.config-error'
									]);
								}
							});

							// 用户自动登录处理
							this.user_auto_login_handle();
						} else {
							this.showToast(res.data.msg);
						}
					},
					fail: () => {
						this.showToast(i18n[uni.getLocale()]['globalData.Server-request-error']);
					}
				});
			},

			/**
			 * 配置是否有效(100毫秒检验一次、最多检验100次)
			 * object     回调操作对象
			 * method     回调操作对象的函数
			 */
			is_config(object, method) {
				var self = this;
				var count = 0;
				var timer = setInterval(function() {
					if (self.get_config('status') == 1) {
						clearInterval(timer);

						if (typeof object === 'object' && (method || null) != null) {
							object[method](true);
						}
					}
					count++;

					if (count >= 100) {
						clearInterval(timer);
					}
				}, 100);
			},

			/**
			 * 火星坐标GCJ02到百度坐标BD-09(高德，谷歌，腾讯坐标 -> 百度)
			 * lng     经度
			 * lat     纬度
			 */
			map_gcj_to_bd(lng, lat) {
				lng = parseFloat(lng);
				lat = parseFloat(lat);
				let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
				let x = lng;
				let y = lat;
				let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
				let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
				let lngs = z * Math.cos(theta) + 0.0065;
				let lats = z * Math.sin(theta) + 0.006;
				return {
					lng: lngs,
					lat: lats
				};
			},

			/**
			 * 百度坐标BD-09到火星坐标GCJ02(百度 -> 高德，谷歌，腾讯坐标)
			 * lng     经度
			 * lat     纬度
			 */
			map_bd_to_gcj(lng, lat) {
				lng = parseFloat(lng);
				lat = parseFloat(lat);
				let x_pi = 3.14159265358979324 * 3000.0 / 180.0;
				let x = lng - 0.0065;
				let y = lat - 0.006;
				let z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
				let theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
				let lngs = z * Math.cos(theta);
				let lats = z * Math.sin(theta);
				return {
					lng: lngs,
					lat: lats
				};
			},

			/**
			 * 打开地图
			 * lng        经度
			 * lat        纬度
			 * name       地图上面显示的名称
			 * address    地图上面显示的详细地址
			 * scale      缩放比例，范围5~18
			 */
			open_location(lng, lat, name, address, scale) {
				// #ifdef MP-KUAISHOU
				this.showToast(i18n[uni.getLocale()]['globalData.ctrl-map']);
				return false;
				// #endif

				if (lng == undefined || lat == undefined || lng == '' || lat == '') {
					this.showToast(i18n[uni.getLocale()]['globalData.Coordinate-error']);
					return false;
				}

				// 转换坐标打开位置
				uni.openLocation({
					name: name || i18n[uni.getLocale()]['globalData.seat'],
					address: address || '',
					scale: scale || 18,
					longitude: parseFloat(lng),
					latitude: parseFloat(lat)
				});
			},

			// uuid生成
			uuid() {
				var d = new Date().getTime();
				console.log(d);
				return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
					var r = (d + Math.random() * 16) % 16 | 0;
					d = Math.floor(d / 16);
					return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);
				});
			},

			// 获取当前uuid
			request_uuid() {
				var uuid = uni.getStorageSync(this.data.cache_user_uuid_key) || null;
				if (uuid == null) {
					uuid = this.uuid();
					uni.setStorage({
						key: this.data.cache_user_uuid_key,
						data: uuid,
						fail: () => {
							this.showToast(i18n[uni.getLocale()]['globalData.Cache-failure']);
						}
					});
				}
				return uuid;
			},

			// 链接地址事件
			url_event(e) {
				var value = e.currentTarget.dataset.value || null;
				var is_redirect = parseInt(e.currentTarget.dataset.redirect || 0) == 1;
				this.url_open(value, is_redirect);
			},

			// url打开
			url_open(value, is_redirect = false) {
				if (value != null) {
					var temp = value.substr(0, 6); // /pages
					if (temp == 'http:/' || temp == 'https:') {
						this.open_web_view(value); //网络地址
					} else {
						if (this.is_tabbar_pages(value)) { //如果是tabar页面就跳tabar页面
							uni.switchTab({
								url: value
							});
						} else {
							if (is_redirect) {
								uni.redirectTo({
									url: value
								});
							} else {
								uni.navigateTo({
									url: value
								});
							}
						}
					}
				}
			},

			// 剪贴板
			text_copy_event(data) {
				var value = (typeof(data) == 'object') ? (data.currentTarget.dataset.value || null) : (data || null);
				if (value != null) {
					var self = this;
					uni.setClipboardData({
						data: value,
						success(res) {
							uni.getClipboardData({
								success(res) {
									self.showToast(i18n[uni.getLocale()]['globalData.Success'], 'success');
								}
							});
						}
					});
				} else {
					this.showToast(i18n[uni.getLocale()]['globalData.duplicate-empty']);
				}
			},

			// 图片预览
			image_show_event(e) {
				var value = e.currentTarget.dataset.value || null;
				if (value != null) {
					uni.previewImage({
						current: value,
						urls: [value]
					});
				} else {
					this.showToast(i18n[uni.getLocale()]['globalData.pic-empty']);
				}
			},

			// 静态文件url地址
			get_static_url(type, is_plugins) {
				// 默认公共地址
				if ((type || null) == null) {
					type = 'common';
				}

				// 是否插件
				if ((is_plugins || false) == true) {
					// 根据配置的静态url地址+插件标识符
					return this.data.static_url + 'static/plugins/images/' + type + '/';
				} else {
					// 根据配置的静态url地址+主题标识+参数类型组合远程静态文件地址
					return this.data.static_url + 'static/app/' + this.data.default_theme + '/' + type + '/';
				}
			},

			// rpx转px
			rpx_to_px(value) {
				return ((value || 0) == 0) ? 0 : parseInt(value) / 750 * parseInt(this.get_system_info('windowWidth', 0));
			},

			// px转rpx
			px_to_rpx(value) {
				return ((value || 0) == 0) ? 0 : parseInt(value) * 750 / parseInt(this.get_system_info('windowWidth', 0));
			},

			// 终端类型
			application_client() {
				var type = '';
				// #ifdef APP
				type = 'app';
				//#endif
				// #ifdef MP
				type = 'mp';
				//#endif
				return type;
			},

			// 终端类型值
			application_client_type() {
				var value = '';
				// #ifdef MP-WEIXIN
				value = 'weixin';
				//#endif
				// #ifdef MP-ALIPAY
				value = 'alipay';
				//#endif
				// #ifdef MP-BAIDU
				value = 'baidu';
				//#endif
				// #ifdef MP-QQ
				value = 'qq';
				//#endif
				// #ifdef MP-TOUTIAO
				value = 'toutiao';
				//#endif
				// #ifdef MP-KUAISHOU
				value = 'kuaishou';
				//#endif
				// #ifdef H5
				value = 'h5';
				//#endif
				// #ifdef APP
				switch (uni.getSystemInfoSync().platform) {
					case 'android':	
						value = 'android';
						break;
					case 'ios':
						value = 'ios';
						break;
				}
				//#endif
				return value;
			},

			// 授权验证
			auth_check(object, method, scope, msg) {
				var self = this;
				uni.getSetting({
					success(res) {
						if (!res.authSetting[scope]) {
							uni.authorize({
								scope: scope,
								success(res) {
									if (typeof object === 'object' && (method || null) != null) {
										object[method](1);
									}
								},
								fail(res) {
									self.showToast(msg || i18n[uni.getLocale()][
										'globalData.open-empower'
									]);
									setTimeout(function() {
										uni.openSetting();
									}, 1000);
								}
							});
						} else {
							if (typeof object === 'object' && (method || null) != null) {
								object[method](1);
							}
						}
					}
				});
			},

			// 窗口宽度处理
			window_width_handle(width) {
				// #ifdef H5 || APP
				if (width > 800) {
					width = 800;
				}
				// #endif
				return width;
			},

			// 窗口高度处理
			window_height_handle(system) {
				var height = system.windowHeight;
				// 状态栏
				if (system.statusBarHeight > 0) {
					height += system.statusBarHeight;
				}
				// 导航栏
				if (system.windowTop > 0) {
					height += system.windowTop;
				}
				// 底部菜单
				if (system.windowBottom > 0) {
					height += system.windowBottom;
				}
				return height;
			},

			// 获取当前页面地址
			// is_whole 完整地址（?后面的参数）
			get_page_url(is_whole = true) {
				// #ifdef MP || APP
				var url = this.current_page();
				// #endif
				// #ifdef H5
				var url = window.location.href;
				// #endif
				if (is_whole == false) {
					var temp = url.split('?');
					url = temp[0];
				}
				return url;
			},

			// 是否微信环境
			is_weixin_env() {
				var agent = navigator.userAgent.toLowerCase();
				if (agent.match(/MicroMessenger/i) == 'micromessenger') {
					return true;
				}
				return false;
			},

			// 用户微信webopenid是否存在
			is_user_weixin_web_openid(order_ids) {
				// 微信环境判断是否已有web_openid、不存在则跳转到插件进行授权
				if (this.is_weixin_env()) {
					var web_openid = this.get_user_cache_info('weixin_web_openid') || null;
					if (web_openid == null) {
						// 已经授权则重新刷新用户信息
						var params = this.get_launch_cache_info();
						if (params != null && (params.is_weixin_auth_web_openid || 0) == 1) {
							uni.showLoading({
								title: i18n[uni.getLocale()]['globalData.Processing']
							});
							uni.request({
								url: this.get_request_url("tokenuserinfo", "user"),
								method: "POST",
								data: {},
								dataType: "json",
								success: res => {
									uni.hideLoading();
									if (res.data.code == 0) {
										uni.setStorageSync(this.data.cache_user_info_key, res.data.data);
									} else {
										this.showToast(res.data.msg);
									}
								},
								fail: () => {
									uni.hideLoading();
									this.showToast(i18n[uni.getLocale()]['globalData.Server-request-error']);
								}
							});
							return true;
						} else {
							uni.setStorageSync(this.data.cache_page_pay_key, (typeof order_ids == 'array') ? order_ids
								.join(',') : order_ids);
							var page_url = this.get_page_url();
							page_url += (page_url.indexOf('?') == -1) ? '?' : '&';
							page_url += 'is_weixin_auth_web_openid=1';
							var request_url = encodeURIComponent(base64.encode(page_url));
							var url = this.get_request_url("index", "pay", "weixinwebauthorization", "request_url=" +
								request_url, "index").replace('&ajax=ajax', '');
							window.location.href = url;
						}
						return false;
					}
				}
				return true;
			},

			// app标题
			get_application_title() {
				var value = null;
				// 根据终端类型获取对应数据
				var type = this.application_client_type() || null;
				if (type !== null) {
					value = this.get_config('config.common_app_mini_' + type + '_title') || null;
				}
				// 获取公共数据
				if (value === null) {
					value = this.get_config('config.home_site_name', this.data.application_title);
				}
				return value;
			},

			// app描述
			get_application_describe() {
				var value = null;
				// 根据终端类型获取对应数据
				var type = this.application_client_type() || null;
				if (type !== null) {
					value = this.get_config('config.common_app_mini_' + type + '_describe') || null;
				}
				// 获取公共数据
				if (value === null) {
					value = this.data.application_describe;
				}
				return value;
			},

			// applogo
			get_application_logo() {
				return this.get_config('config.home_site_logo_wap', this.data.application_logo);
			},

			// 分享内容处理
			share_content_handle(data) {
				// 获取插件配置信息
				var share_config = this.get_config('plugins_base.share.data') || {};
				var result = {
					title: data.title || share_config.title || this.get_application_title(),
					desc: data.desc || share_config.desc || this.get_application_describe(),
					path: data.path || this.data.tabbar_pages[0],
					query: this.share_query_handle(data.query || ''),
					img: data.img || share_config.pic || this.get_config('config.home_site_logo_square')
				};
				result['url'] = this.get_page_url();
				// #ifdef H5
				result['url'] = result.url.split('#')[0] + '#' + ((result.path.substr(0, 1) == '/') ? '' : '/') + result
					.path + result.query;
				// #endif
				return result;
			},

			// 分享参数处理
			share_query_handle(query) {
				if ((query || null) == null || query.indexOf('referrer') == -1) {
					var user_id = parseInt(this.get_user_cache_info('id', 0)) || 0;
					if (user_id > 0) {
						var join = ((query || null) == null) ? '' : '&';
						query += join + 'referrer=' + user_id;
					}
				}
				return ((query || null) == null) ? '' : '?' + query;
			},

			// 是否朋友圈单页访问提示
			is_single_page_check() {
				if (this.is_current_single_page() == 1) {
					this.showToast(i18n[uni.getLocale()]['globalData.empower-make']);
					return false;
				}
				return true;
			},

			// 当前页面地址
			current_page() {
				// 来源地址、拼接当前小程序页面
				var pages = getCurrentPages();
				var page = pages[pages.length - 1];
				return this.page_url_handle(page);
			},

			// 上一页页面地址
			prev_page() {
				var value = null;
				var pages = getCurrentPages();
				var length = pages.length;
				if (length > 1) {
					value = this.page_url_handle(pages[length - 2]);
				}
				return value;
			},

			// 返回上一页、则回到shouy 
			page_back_prev_event() {
				var prev_page = this.prev_page();
				if (prev_page == null) {
					uni.switchTab({
						url: this.data.tabbar_pages[0]
					});
				} else {
					uni.navigateBack();
				}
			},

			// 页面地址处理
			page_url_handle(page) {
				var route = page.route;
				var options = page.options || {};
				var query = '';
				if (JSON.stringify(options) != '{}') {
					for (var i in options) {
						query += '&' + i + '=' + options[i];
					}
				}
				if ((query || null) != null) {
					route += '?' + query.substr(1);
				}
				return route;
			},

			// 进入客服
			chat_entry_handle(url) {
				if ((url || null) == null) {
					this.showToast(i18n[uni.getLocale()]['globalData.customer-service-address-incorrect']);
				} else {
					// 拼接基础参数
					url = this.request_params_handle(url);

					// 拼接当前页面地址
					var route = this.current_page();
					url += '&source=' + encodeURIComponent(base64.encode(route).replace(new RegExp(/=/g), ''));

					// 打开webview
					this.open_web_view(url);
				}
			},

			// 用户自动登录处理
			user_auto_login_handle() {
				// #ifdef H5
				var user = this.get_user_cache_info() || null;
				if (user == null) {
					var params = this.get_launch_cache_info() || {};
					var config = this.get_config('plugins_base.thirdpartylogin.data') || null;
					var data = this.get_config('plugins_thirdpartylogin_data') || null;
					var url = null;
					// 是否微信环境
					if ((params.thirdpartylogin || null) == null && config != null && data != null && this
						.is_weixin_env()) {
						var is_auto = config.weixin_is_env_auto_login || 0;
						var weixin = data.weixin || null;
						if (is_auto != 0 && weixin != null) {
							url = weixin.login_url;
						}
					}

					// 存在登录url则跳转登录
					if (url != null) {
						// 上一个页面记录
						var page = this.current_page();
						if (page != null) {
							uni.setStorageSync(this.data.cache_prev_page_key, page);
						}

						// 跳转登录
						window.location.href = url;
					}
				}
				// #endif
			},

			// 清除用户缓存
			remove_user_cache_event() {
				// 用户登录缓存
				uni.removeStorageSync(this.data.cache_user_login_key);
				// 用户信息缓存
				uni.removeStorageSync(this.data.cache_user_info_key);

				// 非小程序则两秒后回到首页
				this.showToast(i18n[uni.getLocale()]['globalData.clean-up'], 'success');
				var url = this.data.tabbar_pages[0];
				setTimeout(function() {
					uni.switchTab({
						url: url
					});
				}, 1500);
			}
		},

		/**
		 * 小程序初始化
		 */
		onLaunch(params) {},

		/**
		 * 小程序页面显示
		 */
		onShow(params) {
			// 初始化配置
			this.globalData.init_config();

			// 设置设备信息
			this.globalData.set_system_info();

			// 参数处理+缓存
			this.globalData.set_launch_cache_info(params);

			// 场景值
			this.globalData.set_scene_data(params);
		},

		methods: {}
	};
</script>
<style>
	@import './common/css/page.css';
	@import './common/css/business.css';
	@import './common/css/plugins.css';
	@import './common/css/lib.css';
	@import './common/css/theme/red.css';

	.uni-tabbar__bd {
		/* #ifdef APP */
		width: 10rpx;
		/* #endif */
		width: 150rpx;
		/* overflow: hidden; */
		text-overflow: ellipsis;
	}

	.uni-tabbar__bd .uni-tabbar__label {
		line-height: 12px !important;
	}
</style>